import { reqLogin, reqLogOut, reqUserInfo, reqUserPermission } from "@/api/user";
// 引入本地存储的工具方法
import { SET_TOKEN, GET_TOKEN, DEL_TOKEN } from "@/utils/token";
import { defineStore } from "pinia";


let useUserStore = defineStore('user', {
    state: () => {
        return {
            token: GET_TOKEN(), // 用户的唯一标识 token
            userName: '', // 用户名
            roles: [], // 用户角色
            permissions: JSON.parse(localStorage.getItem("USER_PERMISSION")), // 用户权限
            menus: [], // 用户菜单
            info: {}, // 用户信息
        }
    },
    actions: {
        // 用户登录
        async userLogin(validCode) {
            let result = await reqLogin(validCode)
            if (result.code == 200) {
                SET_TOKEN(result.data.tokenValue)
                this.userName = result.data.loginId
                this.userInfo()
                // 返回一个成功的promise
                return 'ok'
            } else {
                // 返回一个失败的promise
                return Promise.reject(new Error(result.data))
            }
        },
        // 用户登出
        async userLogOut() {
            let result = await reqLogOut(this.userName)
            if (result.code == 200) {
                DEL_TOKEN()
                this.userName = ''
                this.info = {}
                // 清除用户权限缓存
                localStorage.removeItem('USER_PERMISSION')
                // 返回一个成功的promise
                return 'ok'
            } else {
                // 返回一个失败的promise
                return Promise.reject(new Error(result.data))
            }
        },
        // 用户信息
        async userInfo() {
            let result = await reqUserInfo()
            if (result.code == 200) {
                this.userName = result.data.userName
                this.info = result.data

                // 获取用户角色

                // 获取用户权限
                if (!localStorage.getItem("USER_PERMISSION")) {
                    reqUserPermission(this.userName).then(res => {
                        if (res.code == 200) {
                            localStorage.setItem("USER_PERMISSION", JSON.stringify(res.data))
                        }
                    })
                }

                // 返回一个成功的promise
                return 'ok'
            } else {
                // 返回一个失败的promise
                return Promise.reject(new Error(result.data))
            }
        },
    },
    getters: {

    }
})

export default useUserStore